﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using fadmin.Cliente;
using fadmin.Produto;
using fadmin.Pedido;

namespace fadmin
{
    public partial class frmPDV : Form
    {
        List<ProdutoDTO> pedidoFinal = new List<ProdutoDTO>();
        public double total = 0;
        public double desconto = 0;

        public frmPDV()
        {
            InitializeComponent();            
        }

        private delegate void adicionaItemNaListaHandler(string strVal);

        private void button1_Click(object sender, EventArgs e)
        {
            if (!(txtProduto.Text.Trim().Equals("")))
            {
                btnFinalizarPedido.Enabled = true;

                List<ProdutoDTO> pedidos = new List<ProdutoDTO>();

                ProdutoDTO dto = new ProdutoDTO();
                dto.nome = txtProduto.Text;
                dto.preco = Convert.ToDouble(txtValor.Text);
                dto.codigo_produto = Convert.ToInt32(txtCodigoProduto.Text);
                pedidos.Add(dto);

                if (lstMudancas.Items.Count > 0)
                {
                    adicionaItemNaLista(txtCodigoProduto.Text + " - " + txtProduto.Text);
                    adicionaItemNaLista("         " + txtQuantidade.Text + "        " + txtValor.Text.Trim() + "    " + txtPreco.Text.Trim() + "        " + txtSubTotal.Text.Trim().Replace("R$", "").Replace(" ", ""));
                }
                else
                {
                    adicionaItemNaLista("                ÍNDIOS FLORES");
                    adicionaItemNaLista("Pedido de Compra");
                    adicionaItemNaLista("Pedido realizado em : " + DateTime.Now.ToString());
                    adicionaItemNaLista("Cód Cliente: " + lblCodigo.Text + "    Emissao : 04/02/2010");
                    adicionaItemNaLista("------------------------------------------------");
                    adicionaItemNaLista("Produto");
                    adicionaItemNaLista("      Quant. Valor Unit.    Desconto    SubTotal");
                    adicionaItemNaLista("------------------------------------------------");
                    adicionaItemNaLista(txtCodigoProduto.Text + " - " + txtProduto.Text);
                    adicionaItemNaLista("         " + txtQuantidade.Text + "        " + txtValor.Text.Trim() +      "    " + txtPreco.Text.Trim() + "        " + txtSubTotal.Text.Trim().Replace("R$","").Replace(" ",""));
                
                }
                                
                pedidoFinal.Add(dto);
                
                //Incrementa o valor Total
                double aux = Convert.ToDouble(txtSubTotal.Text.Replace("R$","")); 
                total = aux + total;
                txtTotal.Text = total.ToString("F").PadLeft(txtPreco.Mask.Length);
                
                //Incrementa o valor do desconto Total
                aux = 0;
                aux = Convert.ToDouble(txtPreco.Text);
                desconto = aux + desconto;
                txtDesconto.Text = desconto.ToString("F").PadLeft(txtPreco.Mask.Length);

                LimparCampos();
            }

        }

        private void adicionaItemNaLista(string strVal)
        {

            if (lstMudancas.InvokeRequired)

                lstMudancas.Invoke(new adicionaItemNaListaHandler(adicionaItemNaLista), new object[] { strVal });

            else

                lstMudancas.SelectedIndex = lstMudancas.Items.Add(strVal);            

            Application.DoEvents();

        }

        private void btnBuscarCliente_Click(object sender, EventArgs e)
        {            
            frmModalProdutoOld frm = new frmModalProdutoOld(this);
            frm.ShowDialog();
        }

        private void frmPDV_Load(object sender, EventArgs e)
        {
            double preco = 0.00;
            txtPreco.Text = preco.ToString("F").PadLeft(txtPreco.Mask.Length);
            txtQuantidade.Text = "001";
            txtTotal.Text = preco.ToString("F").PadLeft(txtPreco.Mask.Length);
            txtDesconto.Text = preco.ToString("F").PadLeft(txtPreco.Mask.Length);
            txtAcrescimo.Text = preco.ToString("F").PadLeft(txtPreco.Mask.Length);
            txtSubTotal.Text = preco.ToString("F").PadLeft(txtPreco.Mask.Length);
            
        }

        private void frmPDV_Activated(object sender, EventArgs e)
        {
            if (Convert.ToInt32(lblCodigo.Text) >= 1)
            {
                ClienteDTO cliente = new ClienteDTO();
                cliente.codigo_cliente = Convert.ToInt32(lblCodigo.Text);

                List<ClienteDTO> lstCliente = new List<ClienteDTO>();

                //Consulta o Cliente
                ClienteManager manager = new ClienteManager();
                lstCliente = manager.consultar(cliente);

                lblCliente.Text = lstCliente[0].nome.ToString();
                lblCodigo.Text = lstCliente[0].codigo_cliente.ToString();

            }
            if (Convert.ToInt32(txtCodigoProduto.Text) >= 1)
            {
                buscarProduto();
            }

        }

        private void txtCodigoProduto_Leave(object sender, EventArgs e)
        {
            if (!(txtCodigoProduto.Text.Trim().Equals("")))
            {
                buscarProduto();
            }
        }

        private void buscarProduto()
        {
            if (Convert.ToInt32(txtCodigoProduto.Text) > 0)
            {

                ProdutoDTO dto = new ProdutoDTO();
                dto.codigo_produto = Convert.ToInt32(txtCodigoProduto.Text);

                List<ProdutoDTO> listProduto = new List<ProdutoDTO>();
                ProdutoManager manager = new ProdutoManager();

                listProduto = manager.consultar(dto);

                if (listProduto.Count > 0)
                {
                    txtCodigoProduto.Text = listProduto[0].codigo_produto.ToString();
                    txtProduto.Text = listProduto[0].nome.ToString();
                    txtValor.Text = listProduto[0].preco.ToString();

                    //calcula o subTotal
                    CalculaSubTotal();
                }
                else
                {
                    txtProduto.Text = "";
                    txtValor.Text = "";
                }
            }
        }

        //Finalizar o pedido
        private void button1_Click_1(object sender, EventArgs e)
        {
            //Criar um novo pedido no banco
            PedidoDTO pedido = new PedidoDTO();
            pedido.codigo_cliente = Convert.ToInt32(lblCodigo.Text);
            pedido.acrescimo = Convert.ToDouble(txtAcrescimo.Text);
            pedido.datapedido = DateTime.Now;
            pedido.observacao = txtObs.Text;
            pedido.situacao = 1;

            //Pra cada item de pedido, vamos registrar os itens de pedido no objeto
            foreach (ProdutoDTO produto in pedidoFinal)
            {
                pedido.Item.Add(produto);
            }



            
        }

        private void CalculaSubTotal()
        {
            if (!(txtProduto.Text.Trim().Equals("")))
            {
                double desc = Convert.ToDouble(txtPreco.Text);
                int qtd = Convert.ToInt32(txtQuantidade.Text);
                double valor = Convert.ToDouble(txtValor.Text);
                double subtot = (valor * qtd) - desc;
                txtSubTotal.Text = subtot.ToString("F").PadLeft(txtPreco.Mask.Length);
            }
        }

        private void LimparCampos()
        {
            txtCodigoProduto.Text = "000";
            txtProduto.Text = "";
            txtValor.Text = "";
            double preco = 0.00;
            txtPreco.Text = preco.ToString("F").PadLeft(txtPreco.Mask.Length);
            txtQuantidade.Text = "001";
            txtSubTotal.Text = preco.ToString("F").PadLeft(txtSubTotal.Mask.Length);
        }

        private void frmPDV_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode.ToString() == "Escape")
            {
                this.Close();                
            }

            if (e.KeyCode.ToString() == "Return")
            {
                if (txtCodigoProduto.Focused == true)
                {
                    if (!(txtCodigoProduto.Text.Trim().Equals("")))
                    {
                        buscarProduto();
                    }                      
                }

                if (txtQuantidade.Focused == true)
                {
                    if (!(txtCodigoProduto.Text.Trim().Equals("")))
                    {
                        CalculaSubTotal();
                    }  
                }

                if (txtPreco.Focused == true)
                {
                    if (!(txtCodigoProduto.Text.Trim().Equals("")))
                    {
                        CalculaSubTotal();
                    }
                }


            }

        }

        private void txtQuantidade_Leave(object sender, EventArgs e)
        {
            CalculaSubTotal();
        }

        private void txtPreco_Leave(object sender, EventArgs e)
        {
            CalculaSubTotal();
        }

        private void cancelarVendaEscToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnBuscarProduto_Click(object sender, EventArgs e)
        {
            frmModalProduto frm = new frmModalProduto(this);
            frm.ShowDialog();
        }



    }
}
